서버 디스크 교체 및 데이터 마이그레이션 실전 엔지니어링 절차
1줄 요약
서버 스토리지 증설/교체는 단순 파일 복사가 아니라 **(1) DB 트랜잭션 차단 및 정합성 보장, (2) rsync -avAX를 통한 소유권/ACL/SELinux 컨텍스트 완벽 보존, (3) /etc/fstab UUID 기반 안전 마운트, (4) 원본 디렉토리 보존(롤백 경로)**이 유기적으로 맞물려야 하는 고위험 인프라 작업이다.
1. 디스크 교체 및 데이터 마이그레이션 4대 엔지니어링 원칙
[데이터 디렉토리 무손실 이관 프로세스]
1. 사전 동기화 (rsync 1차) ──(온라인 상태)──> [백그라운드 복사 95% 완료]
2. 서비스 데몬 정지 (Stop) ──(유지보수 진입)──> [쓰기 트랜잭션 완전 차단]
3. 최종 델타 동기화 (rsync 2차) ──(수 초 소요)──> [100% 정합성 일치]
4. 마운트 포인트 스왑 및 기동 ──(/etc/fstab UUID)──> [서비스 정상 재개]2. 실전 실행 절차 (SOP)
Step 1. 사전 1차 백그라운드 동기화 (온라인 상태)
수백 GB 이상의 DB 데이터는 서비스 가동 중에 1차 복사를 먼저 수행하여 실제 다운타임을 분 단위로 단축시킨다.
bash
# 1차 동기화: 소유권(-a), 속성(-A), 확장 속성/SELinux(-X) 보존
rsync -avAX --progress /var/lib/mysql/ /data/mysql_new/Step 2. 서비스 데몬 정상 중단 (Clean Shutdown)
버퍼 풀과 트랜잭션 로그(WAL/binlog)가 디스크에 완전히 플러시(Flush)되도록 안전하게 서비스를 내린다.
bash
# DB 서비스 정지 및 프로세스 잔여 확인
systemctl stop mariadb
# 또는
systemctl stop mysqldStep 3. 최종 델타 동기화 및 메타데이터 검증
서비스 정지 상태에서 변경된 잔여 블록만 빠르게 최종 반영한다.
bash
# 2차 최종 동기화 (수 초 내 완료)
rsync -avAX --delete /var/lib/mysql/ /data/mysql_new/
# 소유권 및 권한 검증 (mysql:mysql)
ls -ld /data/mysql_newStep 4. /etc/fstab UUID 마운트 등록 및 경로 전환
디바이스 명(/dev/sdb1)은 재부팅 시 순서가 바뀔 수 있으므로 반드시 블록 UUID를 사용한다.
bash
# 신규 디스크 UUID 확인
blkid /dev/sdb1
# /etc/fstab에 추가 (예시)
# UUID=e8c7a234-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data xfs defaults,noatime 0 0Step 5. 원본 디렉토리 이름 변경(Rename)을 통한 즉시 롤백 확보
원본 디렉토리를 즉시 삭제하지 않고 이름만 변경해 둔다.
bash
# 롤백 대비 원본 보존
mv /var/lib/mysql /var/lib/mysql_backup_20260517
ln -s /data/mysql_new /var/lib/mysql
# 서비스 기동 및 상태 확인
systemctl start mariadb3. 핵심 체크포인트 (Gotchas)
- SELinux 컨텍스트 누락 주의:
rsync시-X옵션을 빼먹으면 SELinux 정책에 의해mysqld가/data/mysql_new에 접근하지 못해Permission Denied로 기동 실패하므로,restorecon -R /data/mysql_new를 실행해 컨텍스트를 복원해야 한다. noatime마운트 옵션: DB 전용 데이터 디스크는 마운트 시noatime옵션을 추가하면 파일 읽기 시 메타데이터 갱신 오버헤드를 줄여 I/O 성능이 향상된다.- 디스크 I/O 병목 모니터링: 복제 완료 후
iostat -x 1을 통해 신규 스토리지의await와%util지표가 정상 범위인지 확인해야 한다.
게시된 시간: 2026-05-17 06:09:18수정한 시간: 2026-08-15 13:57:00